mult_qr Interface

public interface mult_qr

Module Procedures

private subroutine mult_qr_mtx(lside, trans, a, tau, c, work, olwork, err)

Multiplies a general matrix by the orthogonal matrix from a QR factorization such that or .

Arguments

Type IntentOptional Attributes Name
logical, intent(in) :: lside

Set to true to apply or from the left; else, set to false to apply or from the right.

logical, intent(in) :: trans

Set to true to apply ; else, set to false to apply .

real(kind=real64), intent(inout), dimension(:,:) :: a

On input, an LDA-by-K matrix containing the elementary reflectors output from the QR factorization. If lside is set to true, LDA = M, and M >= K >= 0; else, if lside is set to false, LDA = N, and N >= K >= 0. Notice, the contents of this matrix are restored on exit.

real(kind=real64), intent(in), dimension(:) :: tau

A K-element array containing the scalar factors of each elementary reflector defined in.

real(kind=real64), intent(inout), dimension(:,:) :: c

On input, the M-by-N matrix . On output, the product of the orthogonal matrix and the original matrix .

real(kind=real64), intent(out), optional, target, dimension(:) :: work

An optional input, that if provided, prevents any local memory allocation. If not provided, the memory required is allocated within. If provided, the length of the array must be at least olwork.

integer(kind=int32), intent(out), optional :: olwork

An optional output used to determine workspace size. If supplied, the routine determines the optimal size for work, and returns without performing any actual calculations.

class(errors), intent(inout), optional, target :: err

The error object to be updated.

private subroutine mult_qr_mtx_cmplx(lside, trans, a, tau, c, work, olwork, err)

Multiplies a general matrix by the orthogonal matrix from a QR factorization such that or .

Arguments

Type IntentOptional Attributes Name
logical, intent(in) :: lside

Set to true to apply or from the left; else, set to false to apply or from the right.

logical, intent(in) :: trans

Set to true to apply ; else, set to false to apply .

complex(kind=real64), intent(inout), dimension(:,:) :: a

On input, an LDA-by-K matrix containing the elementary reflectors output from the QR factorization. If lside is set to true, LDA = M, and M >= K >= 0; else, if lside is set to false, LDA = N, and N >= K >= 0. Notice, the contents of this matrix are restored on exit.

complex(kind=real64), intent(in), dimension(:) :: tau

A K-element array containing the scalar factors of each elementary reflector defined in.

complex(kind=real64), intent(inout), dimension(:,:) :: c

On input, the M-by-N matrix . On output, the product of the orthogonal matrix and the original matrix .

complex(kind=real64), intent(out), optional, target, dimension(:) :: work

An optional input, that if provided, prevents any local memory allocation. If not provided, the memory required is allocated within. If provided, the length of the array must be at least olwork.

integer(kind=int32), intent(out), optional :: olwork

An optional output used to determine workspace size. If supplied, the routine determines the optimal size for work, and returns without performing any actual calculations.

class(errors), intent(inout), optional, target :: err

The error object to be updated.

private subroutine mult_qr_vec(trans, a, tau, c, work, olwork, err)

Multiplies a vector by the orthogonal matrix from a QR factorization such that .

Arguments

Type IntentOptional Attributes Name
logical, intent(in) :: trans

Set to true to apply ; else, set to false to apply .

real(kind=real64), intent(inout), dimension(:,:) :: a

On input, an M-by-K matrix containing the elementary reflectors output from the QR factorization. Notice, the contents of this matrix are restored on exit.

real(kind=real64), intent(in), dimension(:) :: tau

A K-element array containing the scalar factors of each elementary reflector defined in.

real(kind=real64), intent(inout), dimension(:) :: c

On input, the M-element vector . On output, the product of the orthogonal matrix and the original vector .

real(kind=real64), intent(out), optional, target, dimension(:) :: work

An optional input, that if provided, prevents any local memory allocation. If not provided, the memory required is allocated within. If provided, the length of the array must be at least olwork.

integer(kind=int32), intent(out), optional :: olwork

An optional output used to determine workspace size. If supplied, the routine determines the optimal size for work, and returns without performing any actual calculations.

class(errors), intent(inout), optional, target :: err

The error object to be updated.

private subroutine mult_qr_vec_cmplx(trans, a, tau, c, work, olwork, err)

Multiplies a vector by the orthogonal matrix from a QR factorization such that .

Arguments

Type IntentOptional Attributes Name
logical, intent(in) :: trans

Set to true to apply ; else, set to false to apply .

complex(kind=real64), intent(inout), dimension(:,:) :: a

On input, an M-by-K matrix containing the elementary reflectors output from the QR factorization. Notice, the contents of this matrix are restored on exit.

complex(kind=real64), intent(in), dimension(:) :: tau

A K-element array containing the scalar factors of each elementary reflector defined in.

complex(kind=real64), intent(inout), dimension(:) :: c

On input, the M-element vector . On output, the product of the orthogonal matrix and the original vector .

complex(kind=real64), intent(out), optional, target, dimension(:) :: work

An optional input, that if provided, prevents any local memory allocation. If not provided, the memory required is allocated within. If provided, the length of the array must be at least olwork.

integer(kind=int32), intent(out), optional :: olwork

An optional output used to determine workspace size. If supplied, the routine determines the optimal size for work, and returns without performing any actual calculations.

class(errors), intent(inout), optional, target :: err

The error object to be updated.